import { app, BrowserWindow, ipcMain,dialog,MenuItem,globalShortcut  } from 'electron'


/**
 * Set `__static` path to static files in production
 * https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-static-assets.html
 */
if (process.env.NODE_ENV !== 'development') {
  global.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\')
}
const electron = require('electron') //获取electron对象
const path = require('path');


//用一个 Tray 来表示一个图标,这个图标处于正在运行的系统的通知区 ，通常被添加到一个 context menu 上.
const Menu = electron.Menu;
const Tray = electron.Tray;
//托盘对象 
var appTray = null;

let mainWindow

let newWindow

const winURL = process.env.NODE_ENV === 'development'
  ? `http://localhost:9080`
  : `file://${__dirname}/index.html`


const newURL = process.env.NODE_ENV === 'development'
  ? `http://localhost:9080`
  : `file://${__dirname}/index.html`

function createWindow() {
  /**
   * Initial window options
   */

  //确定主窗口位置为0 0 开始
  let displays = electron.screen.getAllDisplays()
  let mainExternalDisplay = displays.find((display) => {
    return display.bounds.x == 0 && display.bounds.y == 0
  })
  mainWindow = new BrowserWindow({
    frame: false,//无边框
    useContentSize: true,
    x: mainExternalDisplay.bounds.x + 500, //第一屏x位置
    y: mainExternalDisplay.bounds.y + 50,//第一屏y位置
    height: 563,
    width: 1000
  })

  ipcMain.on('min', e => mainWindow.minimize());//最小
  ipcMain.on('max', e => mainWindow.maximize());//最大
  //ipcMain.on('close', e => mainWindow.close());//关闭

  mainWindow.loadURL(winURL)

  mainWindow.on('closed', () => {
    mainWindow = null
  })

  //点击关闭隐藏窗口
  ipcMain.on('close_mainwindow', event => {
    mainWindow.hide();
    mainWindow.setSkipTaskbar(true);
    event.preventDefault();
  });

  //声音提醒
  // function playAudio(){
  //   var audio = new Audio(__dirname + '/tray/app.wav');
  //   audio.play();
  //   setTimeout(function(){
  //       console.log("暂停播放....");
  //       audio.pause();// 暂停
  //   }, 800)
  // }
  // playAudio();

/*
//对话框 (屏幕中间的那种)
dialog.showMessageBox({
      type: 'warning',
      title: '警告',
      message: `端口  被占用`
    })

*/
//全局快捷键(测试可用)
globalShortcut.register('CommandOrControl+l', () => {
 	mainWindow.show();
        mainWindow.setSkipTaskbar(false);
        mainWindow.webContents.send('ping', 'whoooooooh!')
	console.log('CommandOrControl+L is pressed')
})

//本地快捷键(测试不成功)
const menu = new Menu()
menu.append(new MenuItem({
  label: 'Print',
  accelerator: 'CmdOrCtrl+1',
  click: () => { console.log('time to print stuff') }
}))


  //系统托盘右键菜单
  var trayMenuTemplate = [
    {
      label: '主页面',
      click: function () {
        mainWindow.isVisible() ? mainWindow.hide() : mainWindow.show()
        mainWindow.show();
        mainWindow.setSkipTaskbar(false);
      } //打开相应页面 
    },
    {
      label: '设置',
      click: function () { } //打开相应页面
    },
    {
      label: '帮助',
      click: function () { }
    },
    {
      label: '关于',
      click: function () { }
    },
    {
      label: '退出',
      click: function () {
        mainWindow = null;//先销毁窗口 再退出 如果是最小状态直接退出可能会出现无法退出
        app.quit();
      }
    }
  ];

  //系统托盘图标目录

  let trayIcon = path.join(__dirname, '../../static/icons');


  let appTray = new Tray(path.join(trayIcon, '/icon.png'));//app.ico是app目录下的ico文件  [ico会出现转换失败的情况  试了一下png也是可以的]
	


  //系统托盘图标闪烁
  var count = 0, timer = null;
  ipcMain.on('get_new_message', event => {
    timer = setInterval(function () {
      count++;
      if (count % 2 == 0) {
        appTray.setImage(path.join(trayIcon, 'icon.png'))
      } else {
        appTray.setImage(path.join(trayIcon, 'icon_lucency.png'))
      }
    }, 500);
  })
  //关闭系统托盘图闪烁
  ipcMain.on('new_message_read', event => {
    if (!!timer) {
      clearInterval(timer);
      appTray.setImage(path.join(trayIcon, 'icon.png'))
    }
  })

  //任务栏激活闪烁状态 
  mainWindow.flashFrame(true);
	
	
  // 任务栏点击事件 (linux 无效)
  let timeCount = 0
  appTray.on('click', function (Event) {
    setTimeout(() => {
      if (timeCount === 0) {
        console.log('单机事件11111111')
        timeCount = 0
      }
    }, 300)
  })
  // 任务栏点击事件 (linux 无效)
  appTray.on('double-click', function () {
    console.log('双击事件11111111')
    timeCount = 1
  })
  //图标的上下文菜单
  const contextMenu = Menu.buildFromTemplate(trayMenuTemplate);


  //只启动一个实例  makeSingleInstance函数是整个功能需求的核心。大家仔细看看这里即可。
  const shouldQuit = app.makeSingleInstance((commandLine, workingDirectory) => {
    if (mainWindow) {
      if (mainWindow.isMinimized()) mainWindow.restore()
      mainWindow.focus()
    }
  })
  if (shouldQuit) {
    app.quit()
  }

  //设置此托盘图标的悬停提示内容
  appTray.setToolTip('我的托盘图标');

  //设置此图标的上下文菜单
  appTray.setContextMenu(contextMenu);
  //单击右下角小图标显示应用 (linux不适用)
  appTray.on('click', function () {
    mainWindow.show();
  })

  //这里是触发close方法即刻销毁  如果需要图标常驻托盘则主线程应该处于活动状态,只是显示也隐藏切换
  mainWindow.on('close', (e) => {
    mainWindow = null;
  });

  //图标结束
  /*
    //做了一个大胆的尝试  页面触发事件的时候传一个回调里面新打开一个窗口 居然可行~~
    // ipcMain.on('close', e => {
    //投射窗口
    let externalDisplay = displays.find((display) => {
      return display.bounds.x !== 0 || display.bounds.y !== 0
    })
  
    if (externalDisplay) {
      newWindow = new BrowserWindow({
        fullscreen: true,//默认全屏
        frame: false,//无边框
        titleBarStyle: 'hidden',//取消标题栏 适用于苹果和linux  不知道Windows会不会报错
        x: externalDisplay.bounds.x + 500, //第二屏x位置
        y: externalDisplay.bounds.y + 50,//第二屏y位置
        // width: 1000,
        // height: 800
      })
      //监听事件
  
  
      newWindow.loadURL(newURL)
      //全屏
      // newWindow.maximize()
    }
    newWindow.on('closed', () => {
      newWindow = null
    })
    // });
  */
}

app.on('ready', createWindow)

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', () => {
  if (mainWindow === null) {
    createWindow()
  }
})
